#include <QFileDialog>
#include <QMessageBox>

#include "settingsform.h"
#include "ui_settingsform.h"

#include "my_defs.h"
#include "appmanager.h"

SettingsForm::SettingsForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::SettingsForm)
{
    ui->setupUi(this);
    ui->tabStyles->clear();
    QStringList horizonLabels;
    horizonLabels << "№" << "Назва" << "Зображення";
    ui->tabStyles->setHorizontalHeaderLabels(horizonLabels);

    ui->tabStyles->horizontalHeader()->setStretchLastSection(true);
}

SettingsForm::~SettingsForm()
{
    delete ui;
}

void SettingsForm::loadStyles(const QMap<int, Style> styles)
{
    ui->tabStyles->clear();

    foreach (Style st, styles)
    {
        int rowNum = ui->tabStyles->rowCount();
        ui->tabStyles->insertRow(rowNum);
        ui->tabStyles->setItem(rowNum, 0,
                               new QTableWidgetItem(QString("%1").arg(st.uniqId)));
        ui->tabStyles->setItem(rowNum, 1, new QTableWidgetItem(st.name));

        QIcon ico;
        ico.addFile(st.img, QSize(24,24));
        ui->tabStyles->setItem(rowNum, 2, new QTableWidgetItem(ico, st.img));
    }
    ui->tabStyles->resizeColumnsToContents();
}

void SettingsForm::setStyleDir(const QString styleDir)
{
    ui->edtStyleDir->setText(styleDir);
}


void SettingsForm::on_btnChgStyleDir_clicked()
{
    if (appManager->stylesLoaded() == AllStylesLoaded ||
            appManager->stylesLoaded() == SomeStylesLoaded)
    {
        QMessageBox msg(this);
        msg.setText("<h2>Справді потрібно змінити теку зі стилями?</h2>");
        QString infoText("");
        switch (appManager->stylesLoaded()) {
        case AllStylesLoaded:
            infoText = "На даний момент всі стилі є успішно завантажені і коректно працюють.";
            break;
        case SomeStylesLoaded:
            infoText = QString("На даний момент деякі стилі не були завантажені з теки<br /> <i>%1</i>")
                        .arg(appManager->styleLoader()->dir());
            break;
        case NoStylesLoaded:
            infoText = QString("На даний момент не було завантажено <b>жодного</b> стилю з теки <br /> <i>%1</i>")
                    .arg(appManager->styleLoader()->dir());
        default:
            break;
        }
        msg.setInformativeText(infoText);
        msg.setIcon(QMessageBox::Question);
        msg.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
        msg.setDefaultButton(QMessageBox::Yes);
        int ret = msg.exec();
        if (ret == QMessageBox::No) return;
    }
    QString dirName = QFileDialog::getExistingDirectory(this,
                            "Оберіть теку зі стилями:",
                            APP_DIR);
    if (!dirName.isEmpty())
    {
        LOG( this->objectName(), QString("Обрано теку зі стилями: %1").arg(dirName), "" );
        appManager->styleLoader()->setDir(dirName);
        appManager->styleLoader()->loadStyles(appManager->mStyles);

        ui->tabStyles->clearContents();
        ui->tabStyles->setRowCount(0);

        switch (appManager->stylesLoaded()) {
        case AllStylesLoaded:
            appManager->settingsForm()->loadStyles(appManager->mStyles);
            ui->edtStyleDir->setText(dirName);
            break;
        case SomeStylesLoaded:
            ui->edtStyleDir->setText("Деякі стилі не було завантажено!");
            LOG( this->objectName(), "Проблема з завантаженням стилів! Перевірте теку стилів!", "" );
            break;
        case NoStylesLoaded:
            ui->edtStyleDir->setText("Не завантажено стилів.");
            LOG( this->objectName(), "Проблема з завантаженням стилів! Перевірте теку стилів!", "" );
        default:
            break;
        }

    }
    else
    {
        ui->edtStyleDir->setText("Не завантажено стилів.");
        LOG( this->objectName(), "Не було обрано теку зі стилями!", "" );
    }
}

void SettingsForm::on_btnAccept_clicked()
{
    this->close();
}
